草庐IT

C++ Templates 多态障碍

全部标签

c++ - 菱形多态继承 : sizeof Most derived Class

我知道菱形继承会导致歧义,可以通过virtualBaseClasses使用继承来避免,问题不在于此。当类是多态时,问题是关于菱形层次结构中最派生类的大小。这是示例代码和示例输出:#includeusingnamespacestd;classBase{public:virtualvoiddoSomething(){}};classDerived1:publicvirtualBase{public:virtualvoiddoSomething(){}};classDerived2:publicvirtualBase{public:virtualvoiddoSomething(){}};cl

c++ - 转发声明 : templates and inheritance

在编写框架时遇到以下问题:我有classA和classB派生自classA。classA有一个返回B*的函数。当然,这并不难:#includeusingnamespacestd;classB;//forwarddeclarationclassA{public:B*ReturnSomeData();};classB:publicA{};//Implementation:B*A::ReturnSomeData(){returnnewB;//doesn'tmatterhowthefunctionmakespointer}intmain(){Asth;cout但是我不得不使用像这里这样的模板:

c++ - 初始化多态指针容器

我可以初始化多态boost::ptr_vector与boost::assign::list_of?#include#includeboost::ptr_vectorls=boost::assign::list_of(newAnt)(newBee)(newCat);编译失败:error:nomatchforcallto'(boost::assign_detail::generic_list)(Bear*)'替换boost::ptr_vector与std::vector给出相同的错误。两个人建议手动提供模板参数Animal*至list_of:boost::assign::list_of(n

c++ - 多态命令解析器设计

希望对我正在尝试解决的这个问题提出一些意见。我正在尝试改进我的OO体验并充分利用C++的多态功能。我正在尝试为基本命令解析器编写一些代码。他们的命令结构如下:[命令名称][参数]命令名称将仅限于一个单词字符串。参数可以是0到N的字符串列表。每个命令和参数列表都可以指向我系统中的任何种类的软件对象。因此,例如,我可以将rtp统计命令映射到我的rtp模块,将用户统计信息映射到我的用户模块。像那样的东西。现在,我的CLI的入口点将整个命令字符串作为标准字符串提供。并且它提供了一个标准的输出流来向用户显示结果。我真的想避免使用解析器函数然后做ifthenelse之类的处理。所以我在想这样的事情

c++ - 了解多态设计 (C++)

基于我的动态语言背景,我发现我在使用静态类型语言(例如C++)表达我的意图时遇到了问题。我正在为我的应用程序设计一个偏好系统。由于每个偏好都会有一些关联值(默认值、限制、观察者函数...),我决定将每个偏好封装在它自己的对象中。这是我的初稿:classPreference//purelyabstractclass{parseFromString(Strings)=0;get()=0;voidset(newVal)=0;private://internaldata};现在我需要创建一些派生类,如IntPreference、FloatPreference和StringPreference。

c++ - 静态多态中纯抽象函数的等价物是什么?

通过动态多态性,我可以创建无法实例化的接口(interface),因为有些方法是纯虚拟的。什么是静态多态性?考虑这个例子:templatestringf(){return"";}templatestringf(){return"int";}templatestringf(){return"float";}我想“禁用”第一个,就像我将类的方法声明为纯虚拟时一样。 最佳答案 问题:Whatistheequivalentwithstaticpolymorphism?声明一个没有实现的函数模板。仅为您想要支持的类型创建实现。//Onlyth

c++ - 多态类中的虚析构函数

我知道只要你有一个多态基类,基类就应该定义一个虚析构函数。这样当一个指向派生类对象的基类指针被删除时,会先调用派生类的析构函数。如果我在这里错了,请纠正我。此外,如果基类析构函数是非虚拟的,则删除指向派生对象的基类指针将是未定义的行为。如果我也错了,请纠正我。所以我的问题是:为什么当基类析构函数是非虚函数时,对象不会被正确销毁?我假设这是因为虚函数有某种表格,每当调用虚函数时都会记住和查阅该表格。并且编译器知道当一个对象应该被删除时,它应该首先调用派生的析构函数。我的假设是否正确? 最佳答案 如果在删除对象时变量的静态类型是bas类

c++ - 多态实现问题

我写了一个程序,它使用虚函数来实现多态性。我有一个主要的User类,它盲目地调用它认为是通用对象的方法(尽管它们实际上应该是专门的)。这些对象来自覆盖其基类中的纯虚函数的类。以下改编代码应演示我的设置:BaseConfig.h中的泛型类(BaseConfig):classBaseConfig{public:...virtualvoiddisplay()const=0;...}SpecialConfig.h中上述泛型类(SpecialConfig)的专用版本:classSpecialConfig:publicBaseConfig{public:...voiddisplay()const;

c++ - C++ 和 Objective C 中的多态性

我是ObjectiveC的新手,我想更清楚地理解protocol的概念。@protocolprotocolName@optional@required@end我可以将@optional部分与virtualfunction和@required部分与C++的purevirtualfunction相关联吗?@protocol是Objective-C创建接口(interface)和抽象类的方式吗? 最佳答案 Is@protocoliswayofObjective-Ctocreateinterfaceandabstractclass?没错。C

c++ - set <T> vs set <T, comparator> (C++ 多态性)

为什么这段代码structThingComparator{...}staticvoidBlah(set&things){...}...setthings;Blah(things);编译失败并出现以下错误(VisualStudio2010):errorC2664:'Blah':cannotconvertparameter1from'std::set'to'std::set&'我的C++知识显然是有限的,但我希望听到喇叭声宣布多态骑士骑在他可信赖的骏马上,但我只能听到马屁和悲伤的长号:-( 最佳答案 std::set声明asfollow